package main.old.new_2023.last.month_8;


import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * @Description: todo 2682. 找出转圈游戏输家
 * n 个朋友在玩游戏。这些朋友坐成一个圈，按 顺时针方向 从 1 到 n 编号。
 * 从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i + 1) 个朋友的位置（1 <= i < n），而从第 n 个朋友的位置开始顺时针移动 1 步会回到第 1 个朋友的位置。
 *
 * todo 643. 子数组最大平均数 I
 * 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
 * 请你找出平均数最大且 长度为 k 的连续子数组，并输出该最大平均数。
 * 任何误差小于 10-5 的答案都将被视为正确答案。
 * @Author: Take-off
 * @Date: 1:00 PM 2023/6/
 * @Param:
 * @return:
 **/
public class Solution0816 {

    public double findMaxAverage(int[] nums, int k) {
        int result = 0;
        int sum = 0;
        for (int i = 0;i < nums.length;i++){
            if (i < k){
                sum += nums[i];
                result += nums[i];
            }else {
                sum = sum + nums[i] - nums[i - k];
                result = Math.max(sum,result);
            }
        }
        return 0.1 * result / k;
    }

    public static void main(String[] args) {
        int[] nums = {1,12,-5,-6,50,3};
        Solution0816 test = new Solution0816();
        test.findMaxAverage(nums,4);
    }

    //找出转圈游戏输家
    public int[] circularGameLosers(int n, int k) {
        Set<Integer> temps = new HashSet<>();
        for (int i = 1; i <= n ; i++ ){
            temps.add(i);
        }
        int start = 1;
        int mult = 1;
        while (temps.contains(start)){
            temps.remove(start);
            int temp = (start + k * mult) % n;
            start = temp == 0 ? n :temp ;
            mult++;
        }
        int[] result = new int[temps.size()];
        Iterator<Integer> iterator = temps.iterator();
        for (int i= 0;i<temps.size();i++){
            result[i] = iterator.next();
        }
        return result;
    }

}
